this._proxy.SuspendRemote(true);
}
- async inhibit(reason, callback) {
- try {
- const inVariant = new GLib.Variant('(ssss)',
- ['sleep', 'GNOME Shell', reason, 'delay']);
- const [outVariant_, fdList] =
- await this._proxy.call_with_unix_fd_list('Inhibit',
- inVariant, 0, -1, null, null);
- const [fd] = fdList.steal_fds();
- callback(new Gio.UnixInputStream({ fd }));
- } catch (e) {
- logError(e, 'Error getting systemd inhibitor');
- callback(null);
- }
+ async inhibit(reason, cancellable) {
+ const inVariant = new GLib.Variant('(ssss)',
+ ['sleep', 'GNOME Shell', reason, 'delay']);
+ const [outVariant_, fdList] =
+ await this._proxy.call_with_unix_fd_list('Inhibit',
+ inVariant, 0, -1, null, cancellable);
+ const [fd] = fdList.steal_fds();
+ return new Gio.UnixInputStream({ fd });
}
_prepareForSleep(proxy, sender, [aboutToSuspend]) {
this.emit('prepare-for-sleep', false);
}
- inhibit(reason, callback) {
- callback(null);
+ /* eslint-disable-next-line require-await */
+ async inhibit() {
+ return null;
}
};
Signals.addSignalMethods(LoginManagerDummy.prototype);
return this._isModal;
}
- _syncInhibitor() {
+ async _syncInhibitor() {
const lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY);
const lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
const inhibit = !!this._loginSession && this._loginSession.Active &&
this._inhibited = inhibit;
+ this._inhibitCancellable?.cancel();
+ this._inhibitCancellable = new Gio.Cancellable();
+
if (inhibit) {
- this._loginManager.inhibit(_('GNOME needs to lock the screen'),
- inhibitor => {
- if (inhibitor) {
- if (this._inhibitor)
- inhibitor.close(null);
- else
- this._inhibitor = inhibitor;
- }
-
- // Handle uninhibits that happened after the start
- if (!this._inhibited) {
- this._inhibitor?.close(null);
- this._inhibitor = null;
- }
- });
+ try {
+ this._inhibitor = await this._loginManager.inhibit(
+ _('GNOME needs to lock the screen'),
+ this._inhibitCancellable);
+ } catch (e) {
+ if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ log('Failed to inhibit suspend: %s'.format(e.message));
+ }
} else {
this._inhibitor?.close(null);
this._inhibitor = null;